<?php

class Application_Model_InformeElectricidadMensualProyecto extends Sgit_Model
{
    protected $_name = 'informe_electricidad_mensual_proyecto';
    protected $_primary = 'id';

    function init()
    {

        $this->model->Disponibilidad = new Application_Model_Disponibilidad();
        $this->model->ProyectosServicios = new Application_Model_Servicios();
        $this->model->Constantes = new Application_Model_Constantes();
        $this->model->lecturas = new Application_Model_Lecturas();
        $this->model->proyectos = new Application_Model_Proyectos();
        $this->model->contadores = new Application_Model_Contadores();
        $this->model->datacetner = new Application_Model_ConsumoDatacenter();

        $this->element->TipoFacturacion = new Sgit_Form_Element_Select_TipoFacturacion('tipo_facturacion');
        $this->element->TipoDisponibilidad = new Sgit_Form_Element_Select_TipoDisponibilidad('tipo_disponibilidad');
        $this->element->ModalidadDisponibilidad = new Sgit_Form_Element_Select_ModalidadDisponibilidad('modalidad_disponibilidad');
    }


    function imputarElectricidadProyectos($idZona, $mes_imputacion, $anio_imputacion)
    {


        $fecha_imputacion = new Zend_Date();
        $fecha_imputacion->setDay(1)->setYear($anio_imputacion)->setMonth($mes_imputacion);


        $fecha_consumo = new Zend_Date($fecha_imputacion);
        $fecha_consumo->subMonth(1);


        $no_imputar_faltan_contadores = false;


        //datos de compañia
        $dc = $this->model->datacetner->getMes($idZona, $fecha_consumo);



        $proyectos = $this->model->proyectos->getAll(array('id_zona = ?' => (int)$idZona, 'activo = ?' => 1));

        $informe = array();

        foreach ($proyectos as $k => $proyecto)
        {
            
            $informe[$k] = $this->imputarElectricidadProyecto($proyecto, $mes_imputacion, $anio_imputacion);
            $consumo_it += $informe[$k]['consumo_it'];

        }

        //calculo k y precio
        if (!$dc)
        {
            $k = false;
            $precio = false;
        } else
        {
            $dec = 4;
            $k = round($dc['consumo'] / $consumo_it, $dec);
            $precio = round(ceil(pow(10, $dec) * $dc['importe'] / $dc['consumo']) / pow(10, $dec), $dec);
        }


        foreach ($informe as & $v)
        {
            $v['factura_compañia'] = $dc['importe'];
            $v['consumo_compañia'] = $dc['consumo'];
            $v['precio_kwh_calculado'] = $precio;
            $v['coeficiente_repercusion_calculado'] = $k;
        }

        return $informe;
    }


    function imputarElectricidadProyecto($proyecto, $mes_imputacion, $anio_imputacion)
    {

        if (is_array($proyecto))
        {
            $id_proyecto = $proyecto['id'];
            $v = $proyecto;
        } else
        {
            $id_proyecto = $proyecto;
            $v = $this->model->proyectos->getRow($id_proyecto);
        }


        $fecha_imputacion = new Zend_Date();
        $fecha_imputacion->setDay(1)->setYear($anio_imputacion)->setMonth($mes_imputacion);

        $fecha_consumo = new Zend_Date($fecha_imputacion);
        $fecha_consumo->subMonth(1);



        //mapeo datos proyecto

        $record["id_proyecto"] = (int)$id_proyecto;
        $record["proyecto"] = $v['nombre'];
        $record["id_zona"] = (int)$v['id_zona'];
        $record["id_sala"] = (int)$v['id_sala'];
        $record["pep"] = $v['orden'];
        $record["sup_real"] = $v['sup_real'];
        $record["superficie_contratada"] = $v['sup_contr'];
        $record["superficie_ocupada"] = $v['sup_ocupada'];
        $record["disponibilidad_potencia_contratada"] = $v['pot_contr'];
        $record["tipo_disponibilidad"] = $v['id_tip_disp'];
        $record["numero_racks"] = $v['racks'];
        $record["modalidad_disponibilidad"] = $v['mod_dispon'];
        $record["tipo_facturacion"] = $v['tip_fact'];
        $record["porcentaje_gestion"] = $v['porcentaje_gestion'];
        $record["coeficiente_facturacion"] = $v['coeficiente'];
        $record["tipo_gestion"] = $v['tipo_gestion'];
        $record["tipo_consumo"] = $v['tipo_consumo'];
        
        
        $contadores = $this->model->contadores->getContadoresLeidos($id_proyecto, $fecha_consumo);
        
        
        
        $record['contadores'] = $contadores['contadores'];
        $record['leidos'] = (int)$contadores['leidos'];
        $record['faltan'] = ($contadores['contadores'] != $contadores['leidos']) ? true : false;

        $record["consumo_it"] = $this->model->lecturas->consumoProyecto($id_proyecto, $fecha_consumo->get(Zend_Date::MONTH), $fecha_consumo->get(Zend_Date::YEAR));

        $record["mes"] = (int)$mes_imputacion;
        $record["anio"] = (int)$anio_imputacion;
        $record["fecha"] = $fecha_imputacion->toString('MMM - yyyy');


        //facturacion
        $input = $this->showInput($record);

        // $record["input_coeficiente_facturacion"]=$input['coeficiente'];

        $record["text_tipo_facturacion"] = $this->element->TipoFacturacion->getMultiOption($record['tipo_facturacion']) . ' ' . $input;
        ;


        return $record;
    }


    function imputaElectricidadProyectos($data, $idZona, $mes_imputacion, $anio_imputacion)
    {


        $proyectos = $this->imputarElectricidadProyectos($idZona, $mes_imputacion, $anio_imputacion);

        foreach ($proyectos as $proyecto)
        {
            $id_proyecto = $proyecto['id_proyecto'];
            $this->imputaElectricidadProyecto($proyecto, $data[$id_proyecto], $mes_imputacion, $anio_imputacion);
        }


        //graba imputacion tabla global resumen
        $imp = new Application_Model_InformeElectricidadMensualDatacenter();
        $imp->updateImputacion($idZona, $mes_imputacion, $anio_imputacion);


        //graba imputacion tabla salas resumen
        $imp = new Application_Model_InformeElectricidadMensualSalas();
        $imp->updateImputacion($idZona, $mes_imputacion, $anio_imputacion);
        
        
        //actualiza lecturas cointadores no usados
       // $lecturas = new Application_Model_Lecturas();
       // $lecturas->actualizarLecturasContadoresInactivos($idZona, $mes_imputacion, $anio_imputacion);

    }


    function imputaElectricidadProyecto($proyecto, $data, $mes_imputacion, $anio_imputacion)
    {

        if (!is_array($proyecto))
        {
            $id_proyecto = $proyecto;
            $proyecto = $this->imputarElectricidadProyecto($id_proyecto, $mes_imputacion, $anio_imputacion);
        }


        $fecha_imputacion = new Zend_Date();
        $fecha_imputacion->setDay(1)->setYear($anio_imputacion)->setMonth($mes_imputacion);

        $fecha_consumo = new Zend_Date($fecha_imputacion);
        $fecha_consumo->subMonth(1);

        //mapeo lo que guardara en la bse de datos


        //para solo imputar un proyecto, se supune que ya se ha imputado antes, y esta en la BD
        if (!$proyecto['coeficiente_repercusion_calculado'])
        {
            $w['id_proyecto = ?'] = $proyecto['id_proyecto'];
            $w['mes = ?'] = $mes_imputacion;
            $w['anio = ?'] = $anio_imputacion;

            $data_viejo = $this->getRow($w);

            $proyecto['coeficiente_repercusion_calculado'] = $data_viejo['coeficiente_repercusion_calculado'];
            $proyecto['precio_kwh_calculado'] = $data_viejo['precio_kwh_calculado'];

            $this->delete(array('id = ?' => $data_viejo['id']));

        }


        $coeficiente_repercusion_aplicado = (float)$data['coeficiente_repercusion_aplicado'];
        $consumo_imputable = $coeficiente_repercusion_aplicado * $proyecto['consumo_it'];
        $precio_kwh_aplicado = (float)$data['precio_kwh_aplicado'];
        $tarifa_plana = (float)$data['tarifa_plana'];
        $imputacion = $consumo_imputable * $precio_kwh_aplicado;


        if ($proyecto["tipo_disponibilidad"])
        {

            switch ($proyecto["tipo_disponibilidad"])
            {
                case 1: // w/m2
                    $disponibilidad_wm2_contratada = $proyecto['disponibilidad_potencia_contratada'];
                    $proyecto['numero_racks'] = null;
                    break;
                case 2: // w/racks
                    $disponibilidad_wm2_contratada = $proyecto['disponibilidad_potencia_contratada'] / 3;
                    break;
            }


            $potencia = 1000 * Sgit_Util_Potencia::run($proyecto['consumo_it'], $fecha_consumo);


            if ($proyecto['sup_real'])
                $disponibilidad_wm2_consumida = $potencia / $proyecto['sup_real'];

            if ($disponibilidad_wm2_contratada)
                $ratio_consumido_contratado = 100 * $disponibilidad_wm2_consumida / $disponibilidad_wm2_contratada;


            

            //Calculo tramos
            $ratiowm2 = $disponibilidad_wm2_consumida - 500;
            if ($ratiowm2 > 0)
            {
                $tramos = ceil($ratiowm2 / 250);
            }



            $precio_disponibilidad = $this->model->Disponibilidad->getPrecio($proyecto['id_zona'], $disponibilidad_wm2_contratada);
            $precio_exceso_disponibilidad = $this->model->Disponibilidad->getPrecio($proyecto['id_zona'], $disponibilidad_wm2_consumida);


            if($proyecto["modalidad_disponibilidad"])
            {
                
                //imputacion exceso
                switch ($proyecto["modalidad_disponibilidad"])
                {
                    case 1: //Antigua
                        $precio_exceso = $this->model->Constantes->GetOne('valor', array('nombre = ?' => "precio_exceso_" . $proyecto['id_zona']));
                        $imputacion_exceso = $tramos * $precio_exceso * $proyecto['sup_real'];
                        break;
                    case 2: //Nueva
                        $precio_disponibilidad = $this->model->Disponibilidad->getPrecio($proyecto['id_zona'], $disponibilidad_wm2_consumida);
                        $imputacion_exceso = $precio_disponibilidad * $proyecto['sup_real'];
                        break;
                    default:
                        $imputacion_exceso = null;
                }
    
    
     
                $imputacion_disponibilidad_contratada = $this->model->Disponibilidad->getPrecio($proyecto['id_zona'], $disponibilidad_wm2_contratada) * $proyecto['sup_real'];
                $imputacion_disponibilidad_consumida = $this->model->Disponibilidad->getPrecio($proyecto['id_zona'], $disponibilidad_wm2_consumida) * $proyecto['sup_real'];

            }
            
            
            if ($data['coeficiente_facturacion'])
            {
                $proyecto['coeficiente_facturacion'] = $data['coeficiente_facturacion'];
            }


            //facturacion
            $fact = $this->FacturacionByTipo($proyecto, $precio_kwh_aplicado,$tarifa_plana);

            //esto sale del valor servicio exceso potencia
            $facturacion_exceso = $this->model->ProyectosServicios->getFactExceso($proyecto['id_proyecto']);


        }


        $record = array(
            'id_zona' => $proyecto['id_zona'], 
            'id_sala' => $proyecto['id_sala'], 
            'id_proyecto' => $proyecto['id_proyecto'], 
            'anio' => $proyecto['anio'], 
            'mes' => $proyecto['mes'], 
            //'fecha_imputacion' => new Zend_Db_Expr('NOW()'), 
            //'id_usuario_imputacion' => $this->_auth->getIdentity()->id, 
            'consumo_it' => $proyecto['consumo_it'], 
            'coeficiente_repercusion_calculado' => $proyecto['coeficiente_repercusion_calculado'], 
            'coeficiente_repercusion_aplicado' => $coeficiente_repercusion_aplicado, 
            'consumo_imputable' => $consumo_imputable, 
            'precio_kwh_calculado' => $proyecto['precio_kwh_calculado'],
            'precio_kwh_aplicado' => $precio_kwh_aplicado, 
            'imputacion' => $imputacion, 
            'tipo_disponibilidad' => $proyecto['tipo_disponibilidad'], 
            'modalidad_disponibilidad' => $proyecto['modalidad_disponibilidad'],
            'superficie' => $proyecto['sup_real'], 
            'superficie_ocupada' => $proyecto['superficie_ocupada'], 
            'superficie_contratada' => $proyecto['superficie_contratada'], 
            'numero_racks' => $proyecto['numero_racks'], 
            'disponibilidad_potencia_contratada' => $proyecto['disponibilidad_potencia_contratada'], 
            'disponibilidad_wm2_contratada' => $disponibilidad_wm2_contratada, 
            'disponibilidad_wm2_consumida' => $disponibilidad_wm2_consumida, 
            'imputacion_disponibilidad_contratada' => $imputacion_disponibilidad_contratada, 
            'imputacion_disponibilidad_consumida' => $imputacion_disponibilidad_consumida, 
            'ratio_consumido_contratado' => $ratio_consumido_contratado, 
            'tramos' => $tramos, 
            'imputacion_exceso' => $imputacion_exceso, 
            'tipo_facturacion' => $proyecto['tipo_facturacion'], 
            'tipo_gestion' => $proyecto['tipo_gestion'],
            'porcentaje_gestion' => $proyecto['porcentaje_gestion'], 
            'importe_gestion' => $fact['importe_gestion'], 
            'coeficiente_facturacion' => $fact['coeficiente_facturacion'], 
            'consumo_facturable' => $fact['consumo_facturable'], 
            'facturacion_consumo' => $fact['facturacion_consumo'], 
            'facturacion' => $fact['facturacion'], 
            'facturacion_exceso' => $facturacion_exceso, 
        );


        $this->insertRow($record);


        return $record;


    }


    function borraImputacionElectricidadProyectos($idZona, $mes_imputacion, $anio_imputacion)
    {


        $where['id_zona = ?'] = $idZona;
        $where['mes = ?'] = $mes_imputacion;
        $where['anio = ?'] = $anio_imputacion;
        $this->deleteRow($where);


        $imp = new Application_Model_InformeElectricidadMensualSalas();
        $imp->borraImputacion($idZona, $mes_imputacion, $anio_imputacion);

        $imp = new Application_Model_InformeElectricidadMensualDatacenter();
        $imp->borraImputacion($idZona, $mes_imputacion, $anio_imputacion);


    }


    function showInput($row)
    {

        switch ($row['tipo_facturacion'])
        {


            case 3:
                $last_tp = $this->model->ProyectosServicios->getTarifaPlana($row['id_proyecto']);
                $input = Sgit_Util_NumEs::run($last_tp, 2) .'<input type="hidden" name="tarifa_plana' . $row['id_proyecto'] . '" id="tarifa_plana' . $row['id_proyecto'] . '" value="' . round($last_tp, 2) . '" class="tarifa_plana"/> €';
                break;
            case 4:
                $last_imputacion = $this->getAll(array('id_proyecto = ?' => $row['id_proyecto']), array('anio desc', 'mes desc'), null, 1, null, null, 'coeficiente_facturacion');
                $coeficiente_facturacion = $last_imputacion[0]['coeficiente_facturacion'];
                $input = '<input type="text" name="k_facturacion' . $row['id_proyecto'] . '" id="k_facturacion' . $row['id_proyecto'] . '" value="' . $coeficiente_facturacion . '" class="k_facturacion"/>';
                break;
            case 5:
                $input = '['.$row['coeficiente_facturacion'].']';
                break;
            case 8:
                $input = $row['coeficiente_facturacion'];
                break;
            default:
                $input = '';
        }

        return $input;
    }

    function showInput2($row)
    {

        switch ($row['tipo_facturacion'])
        {


            case 3:
                $input = '<input type="text" id="tarifaplana_' . $row['id'] . '" value="' . round($row['facturacion_consumo'], 2) . '"/> €';
                break;
            case 4:
                $input = '<input type="text" id="kfacturacion_' . $row['id'] . '" value="' . $row['coeficiente_facturacion'] . '"/>';
                break;
            case 5:
                $input = $row['coeficiente_facturacion'];
                break;
            case 8:
                $input = $row['coeficiente_facturacion'];
                break;
            default:
                $input = '';
        }

        return $input;
    }


    function FacturacionByTipo($row, $precio_kwh_aplicado,$tarifa_plana)
    {

        switch ($row['tipo_facturacion'])
        {
            case 1:
                $fila = $this->colocation($row);
                break;
            case 3:
                $fila = $this->tarifaPlana($row,$tarifa_plana);
                break;
            case 4:
                $fila = $this->equiposK($row, $precio_kwh_aplicado);
                break;
            case 5:
                $fila = $this->equiposK($row, $precio_kwh_aplicado);
                break;
            case 5:
                $fila = $this->tarifaPlana($row,$tarifa_plana);
                break;
            case 8:
                $fila = $this->equiposK($row, $precio_kwh_aplicado);
                break;
        }


        return $fila;
    }

    function colocation($row)
    {
        $row['coeficiente_facturacion'] = null;
        $row['consumo_facturable'] = null;
        $row['facturacion_consumo'] = null;
        $row['importe_gestion'] = null;
        $row['facturacion'] = null;
        return $row;
    }

    function equiposK($row, $precio_kwh_aplicado)
    {
        $row['coeficiente_facturacion'] = $row['coeficiente_facturacion'];
        $row['consumo_facturable'] = $row['consumo_it'] * $row['coeficiente_facturacion'];
        $row['facturacion_consumo'] = $precio_kwh_aplicado * $row['consumo_it'] * $row['coeficiente_facturacion'];
        $row['importe_gestion'] = $this->importeGestion($row['tipo_gestion'], $row['porcentaje_gestion'], $row['facturacion_consumo']);
        $row['facturacion'] = $row['facturacion_consumo'] + $row['importe_gestion'];
        return $row;

    }


    function tarifaPlana($row,$tarifa_plana)
    {

        $row['coeficiente_facturacion'] = null;
        $row['consumo_facturable'] = null;
        $row['facturacion_consumo'] = $tarifa_plana;
        $row['importe_gestion'] = null;
        $row['facturacion'] = $row['facturacion_consumo'];
        return $row;
    }


    function importeGestion($tipo_gestion, $porcentaje_gestion, $facturacion_consumo)
    {
        if ($tipo_gestion == 2) //porcentaje

        {
            $importe_gestion = $facturacion_consumo * $porcentaje_gestion / 100;
        } elseif ($tipo_gestion == 1) //Fijo

        {
            $importe_gestion = $porcentaje_gestion;
        }

        return $importe_gestion;
    }


    function getFacturacionMes($id_zona, $fecha_imputacion = null, $anio_imputacion = null, $mes_imputacion = null)
    {

        if ($fecha_imputacion)
        {
            $fecha = new Zend_Date($fecha_imputacion,Zend_Date::ISO_8601);
            $mes_imputacion = $fecha->get('M');
            $anio_imputacion = $fecha->get('yyyy');
        }

        $select = $this->getAdapter()->select();
        $select->from(array($this->_name), array('facturacion' => new Zend_Db_Expr('SUM(facturacion_consumo)')))->where("id_zona = ?", $id_zona)->where("mes = ?", $mes_imputacion)->where("anio = ?", $anio_imputacion)->group(array('mes'));

        return $this->getAdapter()->fetchOne($select);

    }


    function getConsumos($id_proyecto, $limit = null)
    {

        $select = $this->getAdapter()->select();
        $select->from(array($this->_name), array('*'))->where("id_proyecto = ?", $id_proyecto)->order(array("anio DESC", "mes DESC"));

        return $this->getAdapter()->fetchAll($select);
    }


    function getImputacionFecha($anio_imputacion, $mes_imputacion, $idZona)
    {
        $select = $this->getAdapter()->select();
        
        $select->from(array($this->_name), array('*'))
        ->joinLeft('proyectos', 'proyectos.id = informe_electricidad_mensual_proyecto.id_proyecto', array('nombre'))
        ->where("{$this->_name}.id_zona = ?", $idZona)->where("mes = ?", $mes_imputacion)->where("anio = ?", $anio_imputacion);


        $rows1 = $this->getAdapter()->fetchAll($select);
        
        
        return $this->assocArray2($rows1, 'id_proyecto');
    }


    function getListadoImputacion($values = array(), $id = null)
    {

        $subselect = $this->getAdapter()->select()->from($this->_name, array('consumo_it'))->where("id_proyecto = pi.id_proyecto")->where("mes = MONTH(SUBDATE(DATE_FORMAT(concat(pi.anio,'-',pi.mes,'-1'), '%Y-%m-%d'),  INTERVAL 1 MONTH))")->where("anio = YEAR(SUBDATE(DATE_FORMAT(concat(pi.anio,'-',pi.mes,'-1'), '%Y-%m-%d'),  INTERVAL 1 MONTH))");


        $select = $this->getAdapter()->select()->from(array('pi' => $this->_name), array('*', 'consumo_it_anterior' => "($subselect)"))->joinLeft('proyectos', 'proyectos.id = pi.id_proyecto', array('proyecto' => 'nombre', 'orden'));


        if (!is_null($id))
        {
            $select->where("proyectos.id= ?", $id);
        } else
        {
            if (is_numeric($values['id_zona']))
            {
                $select->where("pi.id_zona= ?", $values['id_zona']);
                $where['id_zona = ?'] = $values['id_zona'];
            }

            if (is_numeric($values['mes']))
            {
                $select->where("pi.mes= ?", $values['mes']);
                $where['mes = ?'] = $values['mes'];
            }

            if (is_numeric($values['anio']))
            {
                $select->where("pi.anio= ?", $values['anio']);
                $where['anio = ?'] = $values['anio'];
            }

            if (is_numeric($values['id_proyecto']))
                $select->where("pi.id_proyecto= ?", $values['id_proyecto']);

            if ($values['orden'])
                $select->where("proyectos.orden  LIKE ?", "%{$values['orden']}%");

            if (is_numeric($values['id_dir']))
                $select->where("proyectos.id_dir= ?", $values['id_dir']);

            if (is_numeric($values['id_sector']))
                $select->where("proyectos.id_sector= ?", $values['id_sector']);

            if (is_numeric($values['modalidad_disponibilidad']))
                $select->where("pi.modalidad_disponibilidad= ?", $values['modalidad_disponibilidad']);

            if (is_numeric($values['tipo_disponibilidad']))
                $select->where("pi.tipo_disponibilidad= ?", $values['tipo_disponibilidad']);

            if (is_numeric($values['tipo_facturacion']))
                $select->where("pi.tipo_facturacion != ?", $values['tipo_facturacion']);

            if (is_numeric($values['limit']))
                $select->limit($values['limit']);
            
            $select->order(array('anio DESC','mes DESC'));    
                

        }


        $imp = new Application_Model_InformeElectricidadMensualDatacenter();
        $imputaciones = $imp->getAll($where, null, null, null, null, null, array(new Zend_Db_Expr('concat(anio,mes) as f'), 'publicado'));
        $filas = $imp->assocArray2($imputaciones, 'f');


        $rows = $this->getAdapter()->fetchAll($select);


        foreach ($rows as & $v)
        {

            $f = new Zend_Date();
            $f->setDay(1)->setYear($v['anio'])->setMonth($v['mes']);

            $f1 = new Zend_Date($f);
            $f1->subMonth(1);

            $f2 = new Zend_Date($f);
            $f2->subMonth(2);

            $v['fecha'] = $f->toString('MMM-yyyy');
            $v['potencia_actual'] = Sgit_Util_Potencia::run($v['consumo_it'], $f1);
            $v['potencia_anterior'] = Sgit_Util_Potencia::run($v['consumo_it_anterior'], $f2);
            $v['potencia_incremento'] = Sgit_Util_Incremento::run($v['potencia_actual'], $v['potencia_anterior']);


            $v['text_tipo_disponibilidad'] = $this->element->TipoDisponibilidad->getMultiOption($v['tipo_disponibilidad']);
            $v['text_tipo_facturacion'] = $this->element->TipoFacturacion->getMultiOption($v['tipo_facturacion']);


            if ($v['tipo_facturacion'] == 3)
            {
                $v['tarifa_plana'] = $v['facturacion_consumo'];
                $v['facturacion_consumo'] = null;
            }

            $v['facturacion_total'] = $v['facturacion'] + $v['facturacion_exceso'];

            if ($v['imputacion'] != 0)
            {
                $v['margen'] = round(100 * ($v['facturacion_total'] - $v['imputacion']) / $v['imputacion'], 2);
            } else
            {
                $v['margen'] = 0.00;
            }

            $v['imputacion_total'] = $v['imputacion'] + $v['imputacion_exceso'];

            $key = $v['anio'] . $v['mes'];

            $v['publicado'] = (bool)$filas[$key]['publicado'];

        }


        return $rows;

    }
    
    
    
    public function getDatos($id_pep,$idZona,$anio,$col,$categoria='')
    {
        $select = $this->getAdapter()
        ->select()
        ->from(array($this->_name), array('value' => new Zend_Db_Expr("ROUND(SUM($col),2)"), 'mes'))
        ->joinLeft('proyectos', "proyectos.id = {$this->_name}.id_proyecto", array())
        ->where("{$this->_name}.anio = ?", $anio)
        ->where("{$this->_name}.id_zona =?", $idZona)
        ->where('id_pep =?', $id_pep)
        ->group(array('anio', 'mes'));



        $facturacion = $this->getAdapter()->fetchAll($select);
        $filas = $this->assocArray2($facturacion, 'mes');

        $mes_cerrado=max(array_keys($filas));

        for ($i = 1; $i < 13; $i++)
        {
            $fila[$i]['categoria'] = $categoria;
            $fila[$i]['mes_cerrado'] = $mes_cerrado;
            $fila[$i]['mes'] =(int) $i;
            $fila[$i]['id_zona'] = $idZona;
            $fila[$i]['id_pep'] = $id_pep;
            $fila[$i]['anio'] = $anio;
            $fila[$i]['id_categoria'] = 4;
            $fila[$i]['value'] = $filas[$i]['value'];

            $f['acumulado'] += $filas[$i]['value'];
            $fila[$i]['acumulado'] = round($f['acumulado'], 2);
        }

        return $fila;
    }
    
    
    
    public function getDatosForecast($id_pep,$idZona,$anio,$col,$nombre='')
    {
        
        $select = $this->getAdapter()->select();
        $select->from(array($this->_name), array('value' => new Zend_Db_Expr("ROUND(SUM($col),2)"), 'mes'));
        
        $select->joinLeft('proyectos', "proyectos.id = {$this->_name}.id_proyecto", array());
        $select->where('anio = ?', $anio);
        $select->where("$this->_name.id_zona = ?", $idZona);
        $select->where('id_pep =?', $id_pep);
        $select->group(array('anio', 'mes'));


        $facturacion = $this->getAdapter()->fetchAll($select);
        
   
        
        $filas = $this->assocArray2($facturacion, 'mes');

        $mes_cerrado=max(array_keys($filas));

        $progresion=$this->getProgresion($id_pep,$idZona,$col);
        $precio = $this->precio_estimado($id_pep,$idZona);
        
   
        
        $d=new Zend_Date();
        foreach($progresion as &$array)
        {
            foreach($array as $fecha => &$value)
            {
                $mes= $d->set($fecha)->subMonth(1)-> get('M');
                $horas_mes=$d->get(Zend_Date::MONTH_DAYS)*24;
                
                $value=$value ? $value * $horas_mes* $precio[$mes]: null;
            }
        }



        $date=new Zend_Date();
        $date->setDay(10);
        
        for ($i = 1; $i < 13; $i++)
        {
            $date->setMonth($i);
            $date->setYear($anio);
            
            $fila[$i]['categoria'] = $nombre;
            $fila[$i]['mes_cerrado'] = $mes_cerrado;
            $fila[$i]['mes'] =(int) $i;
            $fila[$i]['id_zona'] = $idZona;
            $fila[$i]['id_pep'] = $id_pep;
            $fila[$i]['anio'] = $anio;
            $fila[$i]['id_categoria'] = 6;
            
            if($filas[$i]['value']){
                $fila[$i]['value'] = $filas[$i]['value'];
            }else{
                $key=$date->get('yyyy-MM-dd');
                $fila[$i]['value']=$progresion['salida_regresion'][$key];
            }     
           

            $f['acumulado'] += $fila[$i]['value'];
            $fila[$i]['acumulado'] = round($f['acumulado'], 2);
        }

        return $fila;
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    public function getImputacion($id_pep,$idZona,$fecha,$col)
    {
        $select = $this->getAdapter()
        ->select()
        ->from(array($this->_name), array('value' => new Zend_Db_Expr("ROUND(SUM($col),2)"), 'mes'))
        ->joinLeft('proyectos', "proyectos.id = {$this->_name}.id_proyecto", array())
        ->where("{$this->_name}.anio = ?", $anio)
        ->where("{$this->_name}.id_zona =?", $idZona)
        ->where('id_pep =?', $id_pep)
        ->group(array('anio', 'mes'));



        $rows = $this->getAdapter()->fetchAll($select);
        return $rows;

        
    }
    
    
    
    
    
    
    
    function trx_viejo_nuevo($values = array(), $id = null)
    {
        
        set_time_limit (11500);
        

       
        $select = $this->getAdapter()->select()
           ->from('proyectos_imputados_electricidad',array('*'))
           ->where('anio = ?',2012);
          
         
           
        $rows = $this->getAdapter()->fetchAll($select);


        $m_proyectos=new Application_Model_Proyectos();

        $proyectos=$m_proyectos->getAll();
        
        $proyectos=$m_proyectos->assocArray2($proyectos);
        

        foreach($rows as $v)
        {

            $proyecto=$proyectos[$v['id_proyecto']];
            $record['id_zona']=$v['id_zona'];
            $record['mes']=$v['mes'];
            $record['anio']=$v['anio'];
            $record['id_sala']=$proyecto['id_sala'];
            $record['id_proyecto']=$v['id_proyecto'];
            $record['consumo_it']=$v['consumo_equipos_propios'];
            $record['coeficiente_repercusion_calculado']=$v['coeficiente_repercusion_calculado'];
            $record['coeficiente_repercusion_aplicado']=$v['coeficiente_repercusion_aplicado'];
            $record['consumo_imputable']=$v['consumo_total'];
            $record['precio_kwh_calculado']=$v['precio_calculado'];
            $record['precio_kwh_aplicado']=$v['precio_aplicado'];
            $record['imputacion']=$v['imputacion'];
            $record['tipo_disponibilidad']=$proyecto['id_tip_disp'];
            $record['modalidad_disponibilidad']=$v['mod_disp'];
            $record['superficie']=$v['superficie'];
            $record['superficie_ocupada']=$proyecto['sup_ocupada'];
            $record['superficie_contratada']=$proyecto['sup_contr'];
            $record['numero_racks']=$proyecto['racks'];
            $record['disponibilidad_potencia_contratada']=$proyecto['pot_contr'];
            
            $record['disponibilidad_wm2_contratada']=$proyecto['pot_contr']/$proyecto['sup_real'];
            $record['disponibilidad_wm2_consumida']=$v['ratiowm2'];
            
            $record['imputacion_disponibilidad_contratada']=$v['disponibilidad_precio'];
            
            $record['imputacion_disponibilidad_consumida']=$v['disponibilidad_precio_exceso'];
            $record['ratio_consumido_contratado']=0;
            
            $record['tramos']=$v['tramos'];
            $record['imputacion_exceso']=$v['imputacion_exceso'];
            $record['tipo_facturacion']=$v['tipo_facturacion'];
            $record['tipo_gestion']=$v['tip_gestion'];
            $record['porcentaje_gestion']=$v['por_gestion'];
            $record['importe_gestion']=$v['import_gestion'];
            $record['coeficiente_facturacion']=$v['coeficiente_facturacion'];
            
            $record['consumo_facturable']=$record['consumo_it'] * $v['coeficiente_facturacion'];
            $record['facturacion_consumo']=$v['fact_consumo']-$record['importe_gestion'];
            $record['facturacion']=$v['fact_consumo'];
            $record['facturacion_exceso']=$v['fact_exceso'];
            
            $record['precio_m2_disponibilidad_potencia']=$v['precio_m2_disponibilidad_potencia'];
            $record['precio_rack_disponibilidad']=$v['precio_rack_disponibilidad'];
            $record['precio_m2_sin_acondicionar']=$v['precio_m2_sin_acondicionar'];
            $record['precio_m2']=$v['precio_m2'];
            $record['precio_rack']=$v['precio_rack'];

            $record['created_on']=$v['fecha'];
            $record['created_by']=$v['id_usuario'];


            
            $record['tipo_alojamiento']=$proyecto['tipo_alojamiento'];



            
            switch ($record["tipo_disponibilidad"])
            {
                case 1: // w/m2
                    $disponibilidad_wm2_contratada = $record['disponibilidad_potencia_contratada'];
                    $proyecto['numero_racks'] = null;
                    break;
                case 2: // w/racks
                    $disponibilidad_wm2_contratada = $record['disponibilidad_potencia_contratada'] / 3;
                    break;
            }
            
            $record['disponibilidad_wm2_contratada']=$disponibilidad_wm2_contratada;
            $record['ratio_consumido_contratado']=100*$record['disponibilidad_wm2_consumida']/$record['disponibilidad_wm2_contratada'];
            
            

           $this->insert($record);
            
        }
    }




    function trx_viejo_nuevo_datacenter($values = array(), $id = null)
    {
        set_time_limit (11500);
        
        
        $select = $this->getAdapter()->select()->from('imputacion_electricidad')
        ->where('anio = ?',2012);

        $rows = $this->getAdapter()->fetchAll($select);


        $imp = new Application_Model_InformeElectricidadMensualDatacenter();

        foreach($rows as $v)
        {

            $id= $imp->updateImputacion($v['id_zona'], $v['mes'], $v['anio']);

            $record['id_zona']=$v['id_zona'];
            $record['mes']=$v['mes'];
            $record['anio']=$v['anio'];
            $record['consumo_imputable']=$v['consumo_total'];
            $record['consumo_it']=$v['consumo_it'];
            $record['consumo_servicios']=$v['consumo_servicios'];
            $record['coste']=$v['coste'];
            $record['pue']=$v['pue'];
            $record['imputacion']=$v['imputacion'];

            $record['imputacion_exceso']=$v['imputacion_exceso'];
            $record['publicado']=$v['publicado'];
            $record['fecha_publicacion']=$v['fecha_publicacion'];
            $record['cambio_aceptado']=$v['cambio_aceptado'];
            $record['responde_cambio']=$v['responde_cambio'];
            $record['objeto_cambio']=$v['objeto_cambio'];
            $record['fecha_peticion_cambio']=$v['fecha_peticion_cambio'];
            $record['notas_cambio']=$v['notas_cambio'];
            $record['created_on']=$v['fecha'];
            $record['created_by']=$v['id_usuario'];
      

            $imp->update($record,array('id=?'=>$id));
            
        }

    }
    
    
    function trx_viejo_nuevo_salas($values = array(), $id = null)
    {
        set_time_limit (11500);
        
        
        $select = $this->getAdapter()->select()->from('imputacion_salas')
        ->where('anio = ?',2012);
        $rows = $this->getAdapter()->fetchAll($select);

        $imp = new Application_Model_InformeElectricidadMensualSalas();

        foreach($rows as $v)
        {
                

            $record['id_zona']=$v['id_zona'];
            $record['id_sala']=$v['id_sala'];
            $record['mes']=$v['mes'];
            $record['anio']=$v['anio'];
            $record['superficie_neta']=$v['superficie_neta'];
            $record['superficie_ocupada']=$v['superficie_ocupada'];
            $record['superficie_perdida']=$v['superficie_perdida'];
            $record['superficie_contratada']=$v['superficie_contratada'];
            $record['consumo']=$v['consumo'];
            $record['potencia_frio']=$v['potencia_frio'];
      

            $imp->insert($record,array('id=?'=>$id));
            
        }

        
    }
    
    
     public function getProgresion($id_pep,$idZona,$col,$limit=18){
         
        $f=new Zend_Date();
        $f->setDay(10)->subMonth($limit);

        

        $select = $this->getAdapter()->select();
        $select->from(array($this->_name), array('fecha'=>new Zend_Db_Expr("DATE_FORMAT(CONCAT(anio,'-',mes,'-10'), '%Y-%m-%d')"),'value' => new Zend_Db_Expr("SUM(consumo_it*coeficiente_repercusion_aplicado)")));//
        $select->joinLeft('proyectos', "proyectos.id = {$this->_name}.id_proyecto", array());
        $select->where('id_pep =?', $id_pep);
        $select->where("$this->_name.id_zona = ?", $idZona);
        $select->where("DATE_FORMAT(CONCAT(anio,'-',mes,'-10'), '%Y-%m-%d') >= ?", $f->get('yyyy-MM-dd'));
        $select->group(array('anio', 'mes'));



        $data = $this->db->fetchAll($select);
        $f=new Zend_Date();
        foreach($data as $v)
        {   
            $f->set($v['fecha'])->subMonth(1);
            $potencia[$v['fecha']]=Sgit_Util_Potencia::run($v['value'],$f->get('yyyy-MM-dd'));
        }

        return Sgit_Util_Regresion::run($potencia);

    }
    
    
    public function precio_estimado($id_pep,$id_zona,$limit=24){
        
        $f=new Zend_Date();
        $f->setDay(10)->subMonth($limit);


        $select = $this->getAdapter()->select()
        ->from(array($this->_name),array('mes','consumo'=>'ROUND(AVG( precio_kwh_aplicado),4)'))
        ->joinLeft('proyectos', "proyectos.id = {$this->_name}.id_proyecto", array())
        ->where("DATE_FORMAT(CONCAT(anio,'-',mes,'-10'), '%Y-%m-%d') >= ?", $f->get('yyyy-MM-dd'))
        ->group('mes');
 
        $select->where("id_pep= ?",$id_pep);
        $select->where("{$this->_name}.id_zona= ?",$id_zona);

        $data = $this->db->fetchPairs($select);

        return $data;

    }
    

}
